#include <sqlite3.h>
#include <cstring>
#include <iostream>

int main(void)
{
    //初始化句柄
    sqlite3 *conn = NULL;
    int result = sqlite3_open("test.db", &conn);
    //创建表
    const char *createTableSQL = "CREATE TABLE if not exists PersionTable(ID INTEGER NOT NULL, Name Text, Address Text);)";
    sqlite3_exec(conn, createTableSQL, NULL, NULL, NULL);

    //插入数据
    const char *sql_instert = "INSERT INTO PersionTable(ID, Name, Address) VALUES(?,?,?);"; //  SQLite 是不区分大小写的，但也有一些命令是大小写敏感的，比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。 但是创建表的字段 确实大小写敏感的
    int id = 2;
    const char *name = "Peter";
    const char *city = "zhuhai";
    
    sqlite3_stmt *stmt2 = NULL;//此对象的一个实例表示单个 SQL 语句

    //编译一条 SQL 语句
    result = sqlite3_prepare_v2(conn, sql_instert, strlen(sql_instert), &stmt2, NULL);//构造出一个 sqlite3_stmt 对象 
    if(result != SQLITE_OK){
        std::cout << sqlite3_errmsg(conn) << std::endl;
    }

    //将值绑定到准备好的语句
    sqlite3_bind_int(stmt2, 1, id);
    sqlite3_bind_text(stmt2, 2, name, strlen(name), SQLITE_TRANSIENT);
    sqlite3_bind_text(stmt2, 3, city, strlen(city), SQLITE_TRANSIENT);

    //执行一个SQL 语句
    sqlite3_step(stmt2);

    //销毁准备好的SQL语句对象
    sqlite3_finalize(stmt2);

    //关闭数据库连接
    sqlite3_close(conn);

    return 0;
}


/**
 * 打开和关闭数据块0
 * */
